
#ifndef EDGE_H_
#define EDGE_H_

#include <string>
#include "weight.hpp"

class Node;

/**
 * Class Edge: representa las aristas del grafo
 */
class Edge {
private:
		std::string id;
		std::string originId;
		std::string destinyId;
		Weight 		weight;
public:

	/**
	 * Constructor por defecto de la clase Edge.
	 */
    Edge(){}

    /**
     * Constructor parametrizado de la clase Edge.
     */
	Edge(std::string id, std::string originId, std::string destinyId, Weight weight);

	/**
	 * Metodo getter del id de la arista.
	 * @return Retorna el id de la arista.
	 */
	std::string getId();

	/**
	 * Metodo getter del id del nodo origen de la arista.
	 * @return Retorna el id del nodo origen de la arista.
	 */
	std::string getOriginId();

	/**
	 * Metodo getter del id del nodo destino de la arista.
	 * @return Retorna el id del nodo destino de la arista.
	 */
	std::string getDestinyId();

	/**
	 * Metodo getter del atributo de clase Weight de la arista.
	 * @return Retorna el atributo weight de la arista.
	 */
	Weight getWeight();

	/**
	 * Metodo setter del id de la arista.
	 */
	void setId(std::string id);

	/**
	 * Metodo setter del id del nodo origen de la arista.
	 */
	void setOrigin(std::string origin);

	/**
	 * Metodo setter del id del nodo origen de la arista.
	 */
	void setDestiny(std::string destiny);

	/**
	 * Metodo setter del id del nodo destino de la arista.
	 */
	void setWeight(Weight weight);

	/**
	 * Operador asignacion.
	 */
	Edge &operator=(Edge &original);

	/**
	 * Operador comparacion.
	 */
    int operator==(Edge &original)const;

	/**
	 * Operador comparacion por diferencia.
	 */
    int operator!=(Edge &original) const;

	/**
	 * Operador menor.
	 */
    int operator<(Edge &original)const;

	/**
	 * Operador mayor.
	 */
    int operator>(Edge &original) const;

	/**
	 * Operador menor-igual.
	 */
    int operator<=(Edge &original) const;

	/**
	 * Operador mayor-igual.
	 */
    int operator>=(Edge &original) const;

    /**
     * Destructor de la clase Edge.
     */
	virtual ~Edge();

};

#endif 
